package me.wangxuan.pat;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.ParserConfig;

import javax.swing.*;
import javax.swing.text.DefaultCaret;

import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fife.ui.rtextarea.RTextScrollPane;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MainFrame extends JFrame {

    public MainFrame() {
        // 设置窗口标题
        setTitle("主窗口");
        // 设置窗口大小
        setSize(400, 300);
        // 设置窗口关闭操作
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 设置布局为流式布局
        setLayout(new FlowLayout());

        // 创建一个按钮
        JButton editJsonButton = new JButton("编辑JSON");
        // 添加按钮点击事件监听器
        editJsonButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 弹出JSON编辑窗口
                new JsonEditorDialog(MainFrame.this).setVisible(true);
            }
        });

        // 将按钮添加到主窗口
        add(editJsonButton);

        // 设置窗口可见
        setVisible(true);
    }

    public static void main(String[] args) {
        // 创建并显示主窗口
        new MainFrame();
    }
    
    class JsonEditorDialog extends JDialog {

        private JTextArea jsonTextArea;
        private RSyntaxTextArea resultTextArea;

        public JsonEditorDialog(JFrame owner) {
            super(owner, "JSON 编辑器", true); // 模态对话框
            // 初始化组件
            jsonTextArea = new JTextArea(15, 40);
            resultTextArea = new RSyntaxTextArea(15, 40);
//            resultTextArea.setEditable(false);
            
//            RSyntaxTextArea textArea = new RSyntaxTextArea(20, 60);
            resultTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JSON); // 设置为 JSON 语法
            resultTextArea.setCodeFoldingEnabled(true); // 启用代码折叠
            resultTextArea.setAntiAliasingEnabled(true); // 启用抗锯齿

            

            // 自动滚动到最后一行
            DefaultCaret caret = (DefaultCaret) resultTextArea.getCaret();
            caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

            // 设置窗口大小
            setSize(800, 600);
            // 设置窗口布局
            setLayout(new BorderLayout());

            // 创建标签和面板
            JPanel inputPanel = new JPanel(new BorderLayout());
            inputPanel.add(new JLabel("输入JSON:"), BorderLayout.NORTH);
            inputPanel.add(new JScrollPane(jsonTextArea), BorderLayout.CENTER);

//            JPanel outputPanel = new JPanel(new BorderLayout());
         // 创建一个带有滚动条的面板
            RTextScrollPane outputPanel = new RTextScrollPane(resultTextArea);
//            add(scrollPane, BorderLayout.CENTER);
//            outputPanel.add(new JLabel("解析结果:"), BorderLayout.NORTH);
//            outputPanel.add(new JScrollPane(resultTextArea), BorderLayout.CENTER);

            // 创建按钮面板
            JPanel buttonPanel = new JPanel();
            buttonPanel.setLayout(new FlowLayout());

            // 添加按钮：解析、清除
            JButton parseButton = new JButton("解析JSON");
            JButton clearButton = new JButton("清除");

            // 添加按钮点击事件监听器
            parseButton.addActionListener(new ParseJsonActionListener());
            clearButton.addActionListener(new ClearActionListener());

            // 将按钮添加到按钮面板
            buttonPanel.add(parseButton);
            buttonPanel.add(clearButton);

            // 将组件添加到窗口
            add(inputPanel, BorderLayout.NORTH);
            add(outputPanel, BorderLayout.CENTER);
            add(buttonPanel, BorderLayout.SOUTH);
        }

        // 解析JSON的监听器
        private class ParseJsonActionListener implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    // 获取用户输入的JSON字符串
                    String jsonString = jsonTextArea.getText();

                    // 使用FastJSON解析JSON字符串
                    JSONObject jsonObject = JSON.parseObject(jsonString);

                    // 将解析结果转换为格式化的JSON字符串
                    String formattedJson = JSON.toJSONString(jsonObject, true);

                    // 显示解析结果
                    resultTextArea.setText(formattedJson);
                } catch (Exception ex) {
                    // 如果解析失败，显示错误信息
                    resultTextArea.setText("解析失败: " + ex.getMessage());
                }
            }
        }

        // 清除输入和输出的监听器
        private class ClearActionListener implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 清空输入和输出文本区域
                jsonTextArea.setText("");
                resultTextArea.setText("");
            }
        }
    }
}



